<!DOCTYPE html>
<html lang="en">
<head prefix="og: http://ogp.me/ns#">
  <meta charset="utf-8">
  <title>Filter | Hexo</title>
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- Canonical links -->
  <link rel="canonical" href="https://hexo.io/api/filter.html">
  <!-- Alternative links -->
  
    
      <link rel="alternative" hreflang="en" href="https://hexo.io/api/filter.html">
    
      <link rel="alternative" hreflang="zh-tw" href="https://hexo.io/zh-tw/api/filter.html">
    
      <link rel="alternative" hreflang="zh-cn" href="https://hexo.io/zh-cn/api/filter.html">
    
      <link rel="alternative" hreflang="ru" href="https://hexo.io/ru/api/filter.html">
    
      <link rel="alternative" hreflang="ko" href="https://hexo.io/ko/api/filter.html">
    
  
  <!-- Icon -->
  <link rel="apple-touch-icon" sizes="57x57" href="/icon/apple-touch-icon-57x57.png">
  <link rel="apple-touch-icon" sizes="114x114" href="/icon/apple-touch-icon-114x114.png">
  <link rel="apple-touch-icon" sizes="72x72" href="/icon/apple-touch-icon-72x72.png">
  <link rel="apple-touch-icon" sizes="144x144" href="/icon/apple-touch-icon-144x144.png">
  <link rel="apple-touch-icon" sizes="60x60" href="/icon/apple-touch-icon-60x60.png">
  <link rel="apple-touch-icon" sizes="120x120" href="/icon/apple-touch-icon-120x120.png">
  <link rel="apple-touch-icon" sizes="76x76" href="/icon/apple-touch-icon-76x76.png">
  <link rel="apple-touch-icon" sizes="152x152" href="/icon/apple-touch-icon-152x152.png">
  <link rel="icon" type="image/png" href="/icon/favicon-196x196.png" sizes="196x196">
  <link rel="icon" type="image/png" href="/icon/favicon-160x160.png" sizes="160x160">
  <link rel="icon" type="image/png" href="/icon/favicon-96x96.png" sizes="96x96">
  <link rel="icon" type="image/png" href="/icon/favicon-16x16.png" sizes="16x16">
  <link rel="icon" type="image/png" href="/icon/favicon-32x32.png" sizes="32x32">
  <meta name="msapplication-TileColor" content="#2f83cd">
  <meta name="msapplication-TileImage" content="/icon/mstile-144x144.png">
  <!-- CSS -->
  <!-- build:css build/css/navy.css -->
  <link rel="stylesheet" href="/css/navy.css">
  <!-- endbuild -->
  <link href="https://fonts.googleapis.com/css?family=Lato:300,400,700" rel="stylesheet" type="text/css">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css">
  <!-- RSS -->
  <link rel="alternate" href="/atom.xml" title="Hexo">
  <!-- Open Graph -->
  <meta name="description" content="A filter is used to modify some specified data. Hexo passes data to filters in sequence and the filters then modify the data one after the other. This concept was borrowed from WordPress. Synopsishexo">
<meta property="og:type" content="website">
<meta property="og:title" content="Filter">
<meta property="og:url" content="https://hexo.io/api/filter.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="A filter is used to modify some specified data. Hexo passes data to filters in sequence and the filters then modify the data one after the other. This concept was borrowed from WordPress. Synopsishexo">
<meta property="og:locale" content="en">
<meta property="og:updated_time" content="2017-12-06T21:52:16.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Filter">
<meta name="twitter:description" content="A filter is used to modify some specified data. Hexo passes data to filters in sequence and the filters then modify the data one after the other. This concept was borrowed from WordPress. Synopsishexo">
<meta name="twitter:site" content="hexojs">
<meta property="fb:admins" content="100000247608790">
  <!-- Google Analytics -->
  
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-48498357-3', 'auto');
  ga('send', 'pageview');
</script>

</head>

<body>
  <div id="container">
    <header id="header" class="wrapper">
  <div id="header-inner" class="inner">
    <h1 id="logo-wrap">
      <a href="/" id="logo">Hexo</a>
    </h1>
    <nav id="main-nav">
      <a href="/docs/" class="main-nav-link">Docs</a><a href="/api/" class="main-nav-link">API</a><a href="/news/" class="main-nav-link">News</a><a href="/plugins/" class="main-nav-link">Plugins</a><a href="/themes/" class="main-nav-link">Themes</a>
      <a href="https://github.com/hexojs/hexo" class="main-nav-link"><i class="fa fa-github-alt"></i></a>
      <div id="search-input-wrap">
        <div id="search-input-icon">
          <i class="fa fa-search"></i>
        </div>
        <input type="search" id="search-input" placeholder="Search...">
      </div>
    </nav>
    <div id="lang-select-wrap">
      <label id="lang-select-label"><i class="fa fa-globe"></i><span>English</span></label>
      <select id="lang-select" data-canonical="api/filter.html">
        
          <option value="en" selected>English</option>
        
          <option value="zh-tw">正體中文</option>
        
          <option value="zh-cn">简体中文</option>
        
          <option value="ru">Русский</option>
        
          <option value="ko">한국어</option>
        
      </select>
    </div>
    <a id="mobile-nav-toggle">
      <span class="mobile-nav-toggle-bar"></span>
      <span class="mobile-nav-toggle-bar"></span>
      <span class="mobile-nav-toggle-bar"></span>
    </a>
  </div>
</header>

    <div id="content-wrap">
  <div id="content" class="wrapper">
    <div id="content-inner">
      <article class="article-container" itemscope itemtype="http://schema.org/Article">
        <div class="article-inner">
          <div class="article">
            <div class="inner">
              <header class="article-header">
                <h1 class="article-title" itemprop="name">Filter</h1>
                <a href="https://github.com/hexojs/site/edit/master/source/api/filter.md" class="article-edit-link" title="Improve this doc"><i class="fa fa-pencil"></i></a>
              </header>
              <div class="article-content" itemprop="articleBody">
                <p>A filter is used to modify some specified data. Hexo passes data to filters in sequence and the filters then modify the data one after the other. This concept was borrowed from <a href="http://codex.wordpress.org/Plugin_API#Filters" target="_blank" rel="noopener">WordPress</a>.</p>
<h2 id="Synopsis" class="article-heading"><a href="#Synopsis" class="headerlink" title="Synopsis"></a>Synopsis<a class="article-anchor" href="#Synopsis" aria-hidden="true"></a></h2><figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(type, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;, priority);</span><br></pre></td></tr></table></figure>
<p>You can define the <code>priority</code>. Lower <code>priority</code> means that it will be executed first. The default <code>priority</code> is 10.</p>
<h2 id="Execute-Filters" class="article-heading"><a href="#Execute-Filters" class="headerlink" title="Execute Filters"></a>Execute Filters<a class="article-anchor" href="#Execute-Filters" aria-hidden="true"></a></h2><figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.exec(type, data, options);</span><br><span class="line">hexo.extend.filter.execSync(type, data, options);</span><br></pre></td></tr></table></figure>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>context</code></td>
<td>Context</td>
</tr>
<tr>
<td><code>args</code></td>
<td>Arguments. This must be an array.</td>
</tr>
</tbody>
</table>
<p>The first argument passed into each filter is <code>data</code>. The <code>data</code> passed into the next filter can be modified by returning a new value. If nothing is returned, the data remains unmodified. You can even use <code>args</code> to specify other arguments in filters. For example:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'test'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data, arg1, arg2</span>)</span>&#123;</span><br><span class="line">  <span class="comment">// data === 'some data'</span></span><br><span class="line">  <span class="comment">// arg1 === 'foo'</span></span><br><span class="line">  <span class="comment">// arg2 === 'bar'</span></span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> <span class="string">'something'</span>;</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">hexo.extend.filter.register(<span class="string">'test'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data, arg1, arg2</span>)</span>&#123;</span><br><span class="line">  <span class="comment">// data === 'something'</span></span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">hexo.extend.filter.exec(<span class="string">'test'</span>, <span class="string">'some data'</span>, &#123;</span><br><span class="line">  args: [<span class="string">'foo'</span>, <span class="string">'bar'</span>]</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<p>You can also use the following methods to execute filters:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.execFilter(type, data, options);</span><br><span class="line">hexo.execFilterSync(type, data, options);</span><br></pre></td></tr></table></figure>
<h2 id="Unregister-Filters" class="article-heading"><a href="#Unregister-Filters" class="headerlink" title="Unregister Filters"></a>Unregister Filters<a class="article-anchor" href="#Unregister-Filters" aria-hidden="true"></a></h2><figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.unregister(type, filter);</span><br></pre></td></tr></table></figure>
<h2 id="Filter-List" class="article-heading"><a href="#Filter-List" class="headerlink" title="Filter List"></a>Filter List<a class="article-anchor" href="#Filter-List" aria-hidden="true"></a></h2><p>Here is a list of filters used by Hexo.</p>
<h3 id="before-post-render" class="article-heading"><a href="#before-post-render" class="headerlink" title="before_post_render"></a>before_post_render<a class="article-anchor" href="#before-post-render" aria-hidden="true"></a></h3><p>Executed before a post is rendered. Refer to <a href="posts.html#Render">post rendering</a> to learn the execution steps.</p>
<p>For example, to transform the title to lower case:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'before_post_render'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data</span>)</span>&#123;</span><br><span class="line">  data.title = data.title.toLowerCase();</span><br><span class="line">  <span class="keyword">return</span> data;</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="after-post-render" class="article-heading"><a href="#after-post-render" class="headerlink" title="after_post_render"></a>after_post_render<a class="article-anchor" href="#after-post-render" aria-hidden="true"></a></h3><p>Executed after a post is rendered. Refer to <a href="posts.html#Render">post rendering</a> to learn the execution steps.</p>
<p>For example, to replace <code>@username</code> with a link to a Twitter profile:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'after_post_render'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data</span>)</span>&#123;</span><br><span class="line">  data.content = data.content.replace(<span class="regexp">/@(\d+)/</span>, <span class="string">'&lt;a href="http://twitter.com/$1"&gt;#$1&lt;/a&gt;'</span>);</span><br><span class="line">  <span class="keyword">return</span> data;</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="before-exit" class="article-heading"><a href="#before-exit" class="headerlink" title="before_exit"></a>before_exit<a class="article-anchor" href="#before-exit" aria-hidden="true"></a></h3><p>Executed before Hexo is about to exit – this will run right after <code>hexo.exit</code> is called.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'before_exit'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="before-generate" class="article-heading"><a href="#before-generate" class="headerlink" title="before_generate"></a>before_generate<a class="article-anchor" href="#before-generate" aria-hidden="true"></a></h3><p>Executed before generation begins.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'before_generate'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="after-generate" class="article-heading"><a href="#after-generate" class="headerlink" title="after_generate"></a>after_generate<a class="article-anchor" href="#after-generate" aria-hidden="true"></a></h3><p>Executed after generation finishes.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'after_generate'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="template-locals" class="article-heading"><a href="#template-locals" class="headerlink" title="template_locals"></a>template_locals<a class="article-anchor" href="#template-locals" aria-hidden="true"></a></h3><p>Modify <a href="../docs/variables.html">local variables</a> in templates.</p>
<p>For example, to add the current time to the local variables of templates:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'template_locals'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">locals</span>)</span>&#123;</span><br><span class="line">  locals.now = <span class="built_in">Date</span>.now();</span><br><span class="line">  <span class="keyword">return</span> locals;</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="after-init" class="article-heading"><a href="#after-init" class="headerlink" title="after_init"></a>after_init<a class="article-anchor" href="#after-init" aria-hidden="true"></a></h3><p>Executed after Hexo is initialized – this will run right after <code>hexo.init</code> completes.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'after_init'</span>, <span class="function"><span class="keyword">function</span>(<span class="params"></span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="new-post-path" class="article-heading"><a href="#new-post-path" class="headerlink" title="new_post_path"></a>new_post_path<a class="article-anchor" href="#new-post-path" aria-hidden="true"></a></h3><p>Executed when creating a post to determine the path of new posts.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'new_post_path'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data, replace</span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="post-permalink" class="article-heading"><a href="#post-permalink" class="headerlink" title="post_permalink"></a>post_permalink<a class="article-anchor" href="#post-permalink" aria-hidden="true"></a></h3><p>Used to determine the permalink of posts.</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'post_permalink'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">data</span>)</span>&#123;</span><br><span class="line">  <span class="comment">// ...</span></span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h3 id="after-render" class="article-heading"><a href="#after-render" class="headerlink" title="after_render"></a>after_render<a class="article-anchor" href="#after-render" aria-hidden="true"></a></h3><p>Executed after rendering finishes. You can see <a href="rendering.html#after_render_Filters">rendering</a> for more info.</p>
<h3 id="server-middleware" class="article-heading"><a href="#server-middleware" class="headerlink" title="server_middleware"></a>server_middleware<a class="article-anchor" href="#server-middleware" aria-hidden="true"></a></h3><p>Add middleware to the server. <code>app</code> is a <a href="https://github.com/senchalabs/connect" target="_blank" rel="noopener">Connect</a> instance.</p>
<p>For example, to add <code>X-Powered-By: Hexo</code> to the response header:</p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">hexo.extend.filter.register(<span class="string">'server_middleware'</span>, <span class="function"><span class="keyword">function</span>(<span class="params">app</span>)</span>&#123;</span><br><span class="line">  app.use(<span class="function"><span class="keyword">function</span>(<span class="params">req, res, next</span>)</span>&#123;</span><br><span class="line">    res.setHeader(<span class="string">'X-Powered-By'</span>, <span class="string">'Hexo'</span>);</span><br><span class="line">    next();</span><br><span class="line">  &#125;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>

              </div>
              <footer class="article-footer">
                <time class="article-footer-updated" datetime="2017-12-06T21:52:16.000Z" itemprop="dateModified">Last updated: 2017-12-06</time>
                <a href="deployer.html" class="article-footer-prev" title="Deployer"><i class="fa fa-chevron-left"></i><span>Prev</span></a><a href="generator.html" class="article-footer-next" title="Generator"><span>Next</span><i class="fa fa-chevron-right"></i></a>
              </footer>
              
<section id="comments">
  <div id="disqus_thread"></div>
</section>
<script>
  var disqus_shortname = 'hexojs';
  var disqus_url = 'https://hexo.io/api/filter.html';
  var disqus_title = "Filter";
  var disqus_config = function(){
    this.language = 'en';
  };
  (function(){
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = 'https://go.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
  })();
</script>

            </div>
          </div>
          <aside id="article-toc" role="navigation">
            <div id="article-toc-inner">
              <script async type="text/javascript" src="//cdn.carbonads.com/carbon.js?zoneid=1673&serve=C6AILKT&placement=hexoio" id="_carbonads_js"></script>
              <strong class="sidebar-title">Contents</strong>
              <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#Synopsis"><span class="toc-text"><a href="#Synopsis" class="headerlink" title="Synopsis"></a>Synopsis</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#Execute-Filters"><span class="toc-text"><a href="#Execute-Filters" class="headerlink" title="Execute Filters"></a>Execute Filters</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#Unregister-Filters"><span class="toc-text"><a href="#Unregister-Filters" class="headerlink" title="Unregister Filters"></a>Unregister Filters</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#Filter-List"><span class="toc-text"><a href="#Filter-List" class="headerlink" title="Filter List"></a>Filter List</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#before-post-render"><span class="toc-text"><a href="#before-post-render" class="headerlink" title="before_post_render"></a>before_post_render</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#after-post-render"><span class="toc-text"><a href="#after-post-render" class="headerlink" title="after_post_render"></a>after_post_render</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#before-exit"><span class="toc-text"><a href="#before-exit" class="headerlink" title="before_exit"></a>before_exit</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#before-generate"><span class="toc-text"><a href="#before-generate" class="headerlink" title="before_generate"></a>before_generate</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#after-generate"><span class="toc-text"><a href="#after-generate" class="headerlink" title="after_generate"></a>after_generate</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#template-locals"><span class="toc-text"><a href="#template-locals" class="headerlink" title="template_locals"></a>template_locals</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#after-init"><span class="toc-text"><a href="#after-init" class="headerlink" title="after_init"></a>after_init</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#new-post-path"><span class="toc-text"><a href="#new-post-path" class="headerlink" title="new_post_path"></a>new_post_path</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#post-permalink"><span class="toc-text"><a href="#post-permalink" class="headerlink" title="post_permalink"></a>post_permalink</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#after-render"><span class="toc-text"><a href="#after-render" class="headerlink" title="after_render"></a>after_render</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#server-middleware"><span class="toc-text"><a href="#server-middleware" class="headerlink" title="server_middleware"></a>server_middleware</span></a></li></ol></li></ol>
              <a href="#" id="article-toc-top">Back to Top</a>
            </div>
          </aside>
        </div>
      </article>
      <aside id="sidebar" role="navigation">
  <div class="inner">
    <strong class="sidebar-title">Core</strong><a href="index.html" class="sidebar-link">Overview</a><a href="events.html" class="sidebar-link">Events</a><a href="locals.html" class="sidebar-link">Locals</a><a href="router.html" class="sidebar-link">Router</a><a href="box.html" class="sidebar-link">Box</a><a href="rendering.html" class="sidebar-link">Rendering</a><a href="posts.html" class="sidebar-link">Posts</a><a href="scaffolds.html" class="sidebar-link">Scaffolds</a><a href="themes.html" class="sidebar-link">Themes</a><strong class="sidebar-title">Extensions</strong><a href="console.html" class="sidebar-link">Console</a><a href="deployer.html" class="sidebar-link">Deployer</a><a href="filter.html" class="sidebar-link current">Filter</a><a href="generator.html" class="sidebar-link">Generator</a><a href="helper.html" class="sidebar-link">Helper</a><a href="migrator.html" class="sidebar-link">Migrator</a><a href="processor.html" class="sidebar-link">Processor</a><a href="renderer.html" class="sidebar-link">Renderer</a><a href="tag.html" class="sidebar-link">Tag</a>
  </div>
</aside>
    </div>
  </div>
</div>

    <footer id="footer" class="wrapper">
  <div class="inner">
    <div id="footer-copyright">
      &copy; 2017 <a href="https://github.com/hexojs/hexo/graphs/contributors" target="_blank">Hexo</a><br>
      Documentation licensed under <a href="http://creativecommons.org/licenses/by/4.0/" target="_blank">CC BY 4.0</a>.
    </div>
    <div id="footer-links">
      <a href="https://twitter.com/hexojs" class="footer-link" target="_blank"><i class="fa fa-twitter"></i></a>
      <a href="https://github.com/hexojs/hexo" class="footer-link" target="_blank"><i class="fa fa-github-alt"></i></a>
    </div>
  </div>
</footer>

  </div>
  <div id="mobile-nav-dimmer"></div>
  <nav id="mobile-nav">
  <div id="mobile-nav-inner">
    <ul id="mobile-nav-list">
      <a href="/docs/" class="mobile-nav-link">Docs</a><a href="/api/" class="mobile-nav-link">API</a><a href="/news/" class="mobile-nav-link">News</a><a href="/plugins/" class="mobile-nav-link">Plugins</a><a href="/themes/" class="mobile-nav-link">Themes</a>
      <li class="mobile-nav-item">
        <a href="https://github.com/hexojs/hexo" class="mobile-nav-link" rel="external" target="_blank">GitHub</a>
      </li>
    </ul>
    
      <strong class="mobile-nav-title">Core</strong><a href="index.html" class="mobile-nav-link">Overview</a><a href="events.html" class="mobile-nav-link">Events</a><a href="locals.html" class="mobile-nav-link">Locals</a><a href="router.html" class="mobile-nav-link">Router</a><a href="box.html" class="mobile-nav-link">Box</a><a href="rendering.html" class="mobile-nav-link">Rendering</a><a href="posts.html" class="mobile-nav-link">Posts</a><a href="scaffolds.html" class="mobile-nav-link">Scaffolds</a><a href="themes.html" class="mobile-nav-link">Themes</a><strong class="mobile-nav-title">Extensions</strong><a href="console.html" class="mobile-nav-link">Console</a><a href="deployer.html" class="mobile-nav-link">Deployer</a><a href="filter.html" class="mobile-nav-link current">Filter</a><a href="generator.html" class="mobile-nav-link">Generator</a><a href="helper.html" class="mobile-nav-link">Helper</a><a href="migrator.html" class="mobile-nav-link">Migrator</a><a href="processor.html" class="mobile-nav-link">Processor</a><a href="renderer.html" class="mobile-nav-link">Renderer</a><a href="tag.html" class="mobile-nav-link">Tag</a>
    
  </div>
  <div id="mobile-lang-select-wrap">
    <span id="mobile-lang-select-label"><i class="fa fa-globe"></i><span>English</span></span>
    <select id="mobile-lang-select" data-canonical="api/filter.html">
      
        <option value="en" selected>English</option>
      
        <option value="zh-tw">正體中文</option>
      
        <option value="zh-cn">简体中文</option>
      
        <option value="ru">Русский</option>
      
        <option value="ko">한국어</option>
      
    </select>
  </div>
</nav>
  <!-- Scripts -->
<!-- build:js build/js/main.js -->
<script src="/js/lang_select.js"></script>
<script src="/js/toc.js"></script>
<script src="/js/mobile_nav.js"></script>
<!-- endbuild -->

<!-- Algolia -->

<script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"></script>
<script type="text/javascript">
document.getElementById('search-input-wrap').classList.add('on');
docsearch({
  apiKey: 'c3d5d4c995b5e0c2ffb5623900279a66',
  indexName: 'hexo',
  inputSelector: '#search-input'
});
</script>


</body>
</html>